﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SharpSoft.Documentation.Html.CSS
{

    /// <summary>
    /// 描述CSS伪类规则
    /// </summary>
    public struct PseudoClassRule : IRule
    {
        //:first-child选择某个元素的第一个子元素；
        //:last-child选择某个元素的最后一个子元素；
        //:nth-child()选择某个元素的一个或多个特定的子元素；
        //:nth-last-child()选择某个元素的一个或多个特定的子元素，从这个元素的最后一个子元素开始算；
        //:nth-of-type()选择指定的元素；
        //:nth-last-of-type()选择指定的元素，从元素的最后一个开始计算；
        //:first-of-type选择一个上级元素下的第一个同类子元素；
        //:last-of-type选择一个上级元素的最后一个同类子元素；
        //:only-child选择的元素是它的父元素的唯一一个了元素；
        //:only-of-type选择一个元素是它的上级元素的唯一一个相同类型的子元素；
        //:empty选择的元素里面没有任何内容。
        public PseudoClassRule(string name, string para = null)
        {
            _Name = name;
            _Parameter = para;
            _RelationType = CssSelectorRuleRelationType.And;
        }
        private string _Name;
        /// <summary>
        /// 伪类名称
        /// </summary>
        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }

        private string _Parameter;
        /// <summary>
        /// 伪类参数
        /// </summary>
        public string Parameter
        {
            get { return _Parameter; }
            set { _Parameter = value; }
        }
        private CssSelectorRuleRelationType _RelationType;
        /// <summary>
        /// 获取或设置当前规则与下一个规则的关系，对于选择器中的最后一个规则，此设置无效
        /// </summary>
        public CssSelectorRuleRelationType RelationType
        {
            get { return _RelationType; }
            set { _RelationType = value; }
        }

        public override string ToString()
        {
            return "伪类规则：" + Name + "-参数：" + Parameter ?? "无参数" + "。";
        }

        //public INodeFilter ToNodeFilter()
        //{
        //    return null;
        //}
    }
}
